from odoo import fields, models, api


class Book(models.Model):
    """
    原模型继承

    也称经典继承，添加的新功能会自动添加到已有模型中，而不会创建新模型
    """
    _inherit = 'library.book'

    is_available = fields.Boolean('Is Available?')
    isbn = fields.Char(help="Use a valid ISBN-13 or ISBN-10.")
    publisher_id = fields.Many2one(index=True)

    # 要继承方法，我们要重新定义该方法，可以使用 super()来调用已实现的部分
    # 在这个方法中我们验证是否为10位数 ISBN，然后插入遗失的验证逻辑。若不是10位，则进入原有的13位验证逻辑
    @api.multi
    def _check_isbn(self):
        self.ensure_one()
        isbn = self.isbn.replace('-', '')
        digits = [int(x) for x in isbn if x.isdigit()]
        if len(digits) == 10:
            ponderators = [1, 2, 3, 4, 5, 6, 7, 8, 9]
            total = sum(a * b for a, b in zip(digits[:9], ponderators))
            check = total % 11
            return digits[-1] == check
        else:
            return super()._check_isbn()
